package com.gitee.srurl.oid.domain;

/**
 * 因为sid是使用小时作为ID的起始
 * 存在比如系统强制停止（停电、kill -9）等情况，3秒钟上报一次，即使不存在网络波动也会丢失几秒的时间，导致重新启动后id重复
 * 因此需要使用到如db、redis等存储
 * 鉴于此都需要使用存储 而且还会存在时钟回拨的问题，因此使用odi替换sid
 * 总共可以生成一亿亿个  肯定够用了
 * oid (总共42位)构成:
 * - 0        1       1111      111111111111111111111111111111111111
 * 固定      固定     机器ID     顺序号（0-68719476735）六百八十多亿个ID
 * - 1        1        4                 36
 *
 * @author zxw
 * @date 2023/5/7 14:36
 */
public interface OidConstant {

    /**
     * 机器ID位数
     */
    long WORKER_ID_BITS = 2 << 1;

    long MAX_WORKER_ID = ~(-1L << WORKER_ID_BITS);;

    /**
     * 最大序列号位数
     */
    long SEQUENCE_BITS = 36L;

    /**
     * 固定1的位置
     */
    long FIX_ONE_INDEX = WORKER_ID_BITS + SEQUENCE_BITS;

    /**
     * 最大序列号
     */
    long SEQUENCE_MASK = ~(-1L << SEQUENCE_BITS);
}
